home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / perl / 5.10.0 / auto / Storable / read_magic.al < prev    next >
Encoding:
Text File  |  2009-06-26  |  1.8 KB  |  70 lines

  1. # NOTE: Derived from ../../lib/Storable.pm.
  2. # Changes made here will be lost when autosplit is run again.
  3. # See AutoSplit.pm.
  4. package Storable;
  5.  
  6. #line 131 "../../lib/Storable.pm (autosplit into ../../lib/auto/Storable/read_magic.al)"
  7. sub read_magic {
  8.     my($buf, $file) = @_;
  9.     my %info;
  10.  
  11.     my $buflen = length($buf);
  12.     my $magic;
  13.     if ($buf =~ s/^(pst0|perl-store)//) {
  14.     $magic = $1;
  15.     $info{file} = $file || 1;
  16.     }
  17.     else {
  18.     return undef if $file;
  19.     $magic = "";
  20.     }
  21.  
  22.     return undef unless length($buf);
  23.  
  24.     my $net_order;
  25.     if ($magic eq "perl-store" && ord(substr($buf, 0, 1)) > 1) {
  26.     $info{version} = -1;
  27.     $net_order = 0;
  28.     }
  29.     else {
  30.     $net_order = ord(substr($buf, 0, 1, ""));
  31.     my $major = $net_order >> 1;
  32.     return undef if $major > 4; # sanity (assuming we never go that high)
  33.     $info{major} = $major;
  34.     $net_order &= 0x01;
  35.     if ($major > 1) {
  36.         return undef unless length($buf);
  37.         my $minor = ord(substr($buf, 0, 1, ""));
  38.         $info{minor} = $minor;
  39.         $info{version} = "$major.$minor";
  40.         $info{version_nv} = sprintf "%d.%03d", $major, $minor;
  41.     }
  42.     else {
  43.         $info{version} = $major;
  44.     }
  45.     }
  46.     $info{version_nv} ||= $info{version};
  47.     $info{netorder} = $net_order;
  48.  
  49.     unless ($net_order) {
  50.     return undef unless length($buf);
  51.     my $len = ord(substr($buf, 0, 1, ""));
  52.     return undef unless length($buf) >= $len;
  53.     return undef unless $len == 4 || $len == 8;  # sanity
  54.     $info{byteorder} = substr($buf, 0, $len, "");
  55.     $info{intsize} = ord(substr($buf, 0, 1, ""));
  56.     $info{longsize} = ord(substr($buf, 0, 1, ""));
  57.     $info{ptrsize} = ord(substr($buf, 0, 1, ""));
  58.     if ($info{version_nv} >= 2.002) {
  59.         return undef unless length($buf);
  60.         $info{nvsize} = ord(substr($buf, 0, 1, ""));
  61.     }
  62.     }
  63.     $info{hdrsize} = $buflen - length($buf);
  64.  
  65.     return \%info;
  66. }
  67.  
  68. # end of Storable::read_magic
  69. 1;
  70.